package homework;

public class Homework {
    //给定一个整数数组 nums，将数组中的元素向右轮转 k 个位置，其中 k 是非负数。
    //示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4]
    public void rotate(int[] nums, int k) {
        int len = nums.length;
        k %= len;
        reverse(nums, 0, len - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, len - 1);

        System.out.println(nums.toString());
    }
    private static void reverse(int[] nums, int left, int right){
        while(left < right){
            int tmp = nums[left];
            nums[left] = nums[right];
            nums[right] = tmp;
            left++;
            right--;
        }
    }

    //数组nums包含从0到n的所有整数，但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗？
    //示例 1：输入：[3,0,1] 输出：2
    //示例 2：输入：[9,6,4,2,3,5,7,0,1] 输出：8
    public int missingNum(int[] nums){
        int num = 0;
        for (int i = 0; i < nums.length; i++) {
            num ^= nums[i];
            num ^= i;
        }
        return (num ^= nums.length);
    }
}
